package cn.design.realize;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author dlq
 * @description
 *        环境类是使用算法的角色，向外部提供方法,它在解决某个问题（即实现某个方法）时可以采用不同的策略。拥有属性 Strategy
 * @date 2020/10/15 10:18
 * @since 1.0
 */
public class Context {
    private Strategy strategy;

    //封装成List  private List<Strategy> strategies ,但是在操作 不同的策略就要进行判断是哪个策略

    public Context(Strategy strategy){
        this.strategy = strategy;

    }

    public void replaceStrategy(Strategy strategy){
        this.strategy = strategy;
    }

    /**
     * @description 最终支付金额
     * @param decimal
     * @return java.math.BigDecimal
     * @author dlq
     * @date 2020/10/15 10:21
     */
    public BigDecimal finalPaymentAmount(BigDecimal decimal){
        BigDecimal finalAmount = strategy.calculate(decimal);
        //保留两位小数
        return finalAmount.setScale(2,BigDecimal.ROUND_HALF_UP);
    }


}

